package ft.jsf.util;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.ByteArrayOutputStream;

import ft.jsf.cnst.C;

public class U
{
	/**
	 * 
	 * @param is 输入流（注意本方法会 read 消耗该流，但不会 close 关闭它）。
	 * @param encoding
	 * @return
	 */
	public static String getStrFromIs(InputStream is, String encoding)
	{
		String ret = null;
		ByteArrayOutputStream baos = new ByteArrayOutputStream(C.MAX_BUFF);
		
		int cnt = -2;
		int tal = 0;
		byte[] buf = new byte[C.MAX_BUFF];
		
		try
		{
			cnt = is.read(buf);
			while(cnt > -1)
			{
				baos.write(buf, 0, cnt);
				tal += cnt;
				cnt = is.read(buf);
			}
			
			if(tal>0)
			{
				baos.flush();
				/* 输出 baos */
				byte[] bout = baos.toByteArray();
				
				if(bout!=null && bout.length>0)
				{
					ret = new String(bout, encoding);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		
		
		return ret;
	}
	
	/**
	 * 将 str 按照 encoding 编码格式，拆成 byte[] 然后写入 os 输出流
	 * @param str 
	 * @param os 输出流（注意该方法会向该输出流 write 输出数据，但不会关闭它）。
	 * @param encoding 编码格式（比如 "UTF-8"）
	 * @throws Exception
	 */
	public static void putStrToOs(String str, OutputStream os, String encoding)
			throws Exception
	{
		if(str!=null && str.length()>0)
		{
			byte[] bout = str.getBytes(encoding);
			if(bout!=null && bout.length>0)
			{
				os.write(bout);
				os.flush();
			}
		}
	}
	
	/**
	 * 从文件取得字符串（使用默认文件编码 UTF-8 ）
	 * @param file_name
	 * @return
	 */
	public static String getStrFromFilePath(String file_name)
	{
		return getStrFromFilePath(file_name, null);
	}
	
	/**
	 * 从文件取得字符串
	 * @param file_name
	 * @param file_encode 文件编码，为 null 则默认为 UTF-8
	 * @return
	 */
	public static String getStrFromFilePath(String file_name, String file_encode)
	{
		String str_clob = "";
		
		InputStream inps = null;
		ByteArrayOutputStream baos = null;
		byte[] buf = new byte[C.MAX_BUFF];
		byte[] bt_clob = null;
		
		String myEncode = C.ENCODING_UTF8;
		if(file_encode!=null && file_encode.length()>0)
		{
			myEncode = file_encode;
		}
		
		try
		{
			inps = new FileInputStream(file_name);
			baos = new ByteArrayOutputStream();
			
//			int tlen = 0;
			
			int clen  = inps.read(buf);
			while(clen!=-1)
			{
				baos.write(buf, 0, clen);
//				tlen += clen;
				clen = inps.read(buf);
			}
			
			baos.flush();
			bt_clob = baos.toByteArray();
			
			/// DEBUG ///
//			System.out.print("取得 byte 数：");
//			System.out.println(tlen);
//			System.out.print("BAOS 输出 byte 数：");
//			if(bt_clob!=null && bt_clob.length>0)
//			{
//				System.out.println(bt_clob.length);
//			}
//			else
//			{
//				System.out.println(0);
//			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.out.println("-- AEU --|读取文件FileInputStream有错误发生\n"+e.getMessage());
		}
		finally
		{
			if(baos!=null)
			{
				try
				{
					baos.close();
				}
				catch(Exception e2)
				{
				}
				baos = null;
			}
			
			if(inps!=null)
			{
				try
				{
					inps.close();
				}
				catch(Exception e3)
				{
				}
				inps = null;
			}
		}
		
		if(bt_clob!=null && bt_clob.length>0)
		{
			/// DEBUG ///
//			System.out.println("读取文件字节数："+bt_clob.length);
			try
			{
				str_clob = new String(bt_clob, myEncode);
				/// DEBUG ///
//				System.out.println("读取文件字符数："+str_clob.length());
			}
			catch(Exception e)
			{
				System.out.println("-- AEU --|转byte[]->String有错误发生");
				System.out.println(e.getMessage());
				e.printStackTrace();
			}
		}
		else
		{
			System.out.println("读取文件字节数组为空");
		}
		
		return str_clob;
	}
}
